El complement a dos és una operació matemàtica per a nombres binaris. S'utilitza en informàtica com a mètode per a la representació de nombres amb signe.
El complement a dos d'un nombre de N bits es defineix com el seu complement respecte de 2N. La suma d'un nombre i el seu complement a dos és 2N. Per exemple, per al nombre binari de tres bits 010₂ (210 en base 10), el seu complement a 2 és 110₂, perquè 010₂ + 110₂ = 1000₂ (210 + 610 = 810, que és 23).
En aquest exemple, el número binari 010₂ codifica l'enter amb signe 210. El seu complement a dos, 110₂, codifica l'invers: -210. En altres paraules, per invertir el signe de la majoria d'enters (tots menys un), es pot utilitzar el complement a dos de la seva representació binària. La taula de la dreta il·lustra aquesta propietat.
Valor decimal |
Representació complement a dos |
---|---|
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
−4 | 100 |
−3 | 101 |
−2 | 110 |
−1 | 111 |
El complement a dos es calcula invertint els dígits i afegint un 1: 010₂ → 101₂ + 1₂ = 110₂
Valor decimal |
Representació complement a dos |
---|---|
0 | 0000 0000 |
1 | 0000 0001 |
2 | 0000 0010 |
... | ... |
126 | 0111 1110 |
127 | 0111 1111 |
−128 | 1000 0000 |
−127 | 1000 0001 |
−126 | 1000 0010 |
... | ... |
−2 | 1111 1110 |
−1 | 1111 1111 |
Matemàticament, complement a dos d'un nombre natural N que, expressat en el sistema binari està compost per n dígits, es defineix com:
Vegem un exemple: prenem el nombre que, quan s'expressa en binari és , amb 3 dígits, i calculem el seu complement a dos:
Pot semblar complicat, però és molt fàcil obtenir el complement a dos d'un nombre a partir del seu complement a u, perquè el complement a dos d'un nombre binari és una unitat més gran que el seu complement a u, és a dir:
Noteu que en aquest exemple, on s'ha limitat el nombre de bits a 3, no seria possible distingir entre el -2 i el 7 (el 7 en binari és 110₂). En realitat, un nombre en complement a dos s'expressa amb una quantitat arbitrària d'uns a l'esquerra, de la mateixa manera que un nombre binari positiu s'expressa amb una quantitat arbitrària de zeros. Així, el -45, expressat en complement a dos utilitzant 8 bits seria 11010011, mentre que el 19 seria 00010011; i expressat en 16 bits serien 1111111111010011 i 0000000000010011 respectivament.
La utilitat principal del complement a dos es troba en les operacions matemàtiques amb nombres binaris. En particular, la resta de nombres binaris es facilita molt utilitzant el complement a dos: la resta de dos nombres binaris es pot obtenir sumant al minuend el complement a dos del subtrahend.